﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PhotoMgr.src.database;
using popLib;
using System.IO;
using PhotoMgr.src.common;

namespace PhotoMgr.src.gui.photo
{
    public partial class PhotoImport : Form
    {
        List<PhotoMgr.src.database.Image> images;
        List<CategoryList> categories;
        ImageList imagePic;

        public PhotoImport()
        {
            InitializeComponent();

            this.Icon = PhotoMgr.Properties.Resources.logo32;

            images = new List<database.Image>();
            categories = new List<CategoryList>();

            imagePic = new ImageList();
            imagePic.ImageSize = new Size(100, 100);
            listView1.LargeImageList = imagePic;

            DBManager.Fill_Artist(cbx_artist, false);
            cbx_artist.SelectedIndex = -1;

            dgv_total.AutoGenerateColumns = false;
            Global.InitDataGridView(dgv_total, new DataGridViewColumn[] { 
                Global.GenColumn("Chủ đề", "CategoryName").SetSizeMode(DataGridViewAutoSizeColumnMode.Fill),
                Global.GenColumn("Số ảnh", "Counter", DataGridViewContentAlignment.MiddleCenter),                
                Global.GenColumn("CategoryID", "ID").SetVisible(false),                
            });
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ReturnSet rs = FormLib.folderBrowser();

            FormLib.showAnimatedLoading(this, "Hình ảnh đang được nạp.\r\nXin vui lòng đợi trong giây lát", false);

            if( rs.Success ){
                images.Clear();
                categories.Clear();

                string[] files1 = FileLib.getFileList(rs.Result.ToString(), "*.jpg", true, FileLib.SearchOption.FileOnly);
                string[] files2 = FileLib.getFileList(rs.Result.ToString(), "*.png", true, FileLib.SearchOption.FileOnly);

                List<string> files = new List<string>();
                files.AddRange(files1);
                files.AddRange(files2);

                Category category = null;
                string categoryLetter = "";
                foreach (string item in files)
                {
                    categoryLetter = Path.GetFileName(Path.GetDirectoryName(item));
                    category = DBManager.Category_GetIDFromLetter(categoryLetter);

                    if (categories.Where(x => x.CategoryName == category.CategoryName).Count() > 0)
                    {
                        categories.Where(x => x.CategoryName == category.CategoryName).First().Counter++;
                    }
                    else
                    {
                        categories.Add(new CategoryList() { CategoryName = category.CategoryName, Counter = 1, ID = category.CategoryID });
                    }

                    images.Add(new PhotoMgr.src.database.Image() {
                        ArtistID = NumberLib.getInt(cbx_artist.SelectedValue),
                        CategoryID = category.CategoryID,                        
                        ImagePath = item,
                        ImageTitle = Path.GetFileNameWithoutExtension(item),
                        Status = "A",
                    });
                }

                dgv_total.DataSource = null;
                dgv_total.DataSource = categories;
            }

            FormLib.hideLoading(this);
        }

        
        void ListImageByCategory(int categoryID) 
        {
            FormLib.showAnimatedLoading(this, "Hình ảnh đang được nạp.\r\nXin vui lòng đợi trong giây lát", false);
            listView1.Items.Clear();
            imagePic.Images.Clear();

            var rs = images.Where(x => x.CategoryID == categoryID);
            int index = 0;
            foreach (var item in rs)
            {
                imagePic.Images.Add(System.Drawing.Image.FromFile( item.ImagePath ));
                ListViewItem temp = new ListViewItem(item.ImageTitle, index++);
                this.listView1.Items.Add(temp);
            }

            GC.Collect();
            FormLib.hideLoading(this);
        }

        private void dgv_total_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            ListImageByCategory(NumberLib.getInt(dgv_total.Rows[e.RowIndex].Cells[2].Value));
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (cbx_artist.SelectedIndex == -1)
            {
                FormLib.alert("Xin vui lòng chọn tác giả của bộ ảnh!!!");
                return;
            }

            if (!FormLib.confirm("Bạn có chắc bạn muốn thêm tất cả hình trên vào server không?")) return;

            FormLib.showAnimatedLoading(this, "Hình ảnh đang được nạp.\r\nXin vui lòng đợi trong giây lát", false);
            foreach (var item in images)
            {
                DBManager.Save_Image(false, item, new database.Image());
            }
            FormLib.hideLoading(this);
            FormLib.alert("Danh sách hình đã lưu thành công.");

            button3.PerformClick();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            images.Clear();
            categories.Clear();
            dgv_total.DataSource = null;
            dgv_total.DataSource = categories;
        }
    }

    class CategoryList
    {
        public string CategoryName { get; set; }
        public int Counter { get; set; }
        public int ID { get; set; }
    }


}
